package com.zhf.xml04;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

/**
 * @Author: ZhaoHuanfeng
 * @Date: 2020/9/26 15:56
 */
public class TestXPath {
    /**
     * 使用selectSingleNode（）方法查询指定节点的信息
     */
    @Test
    public void test1() throws DocumentException {
        //创建XML解析对象
        SAXReader reader = new SAXReader();

        //解析XML 获取文档对象
        Document document=reader.read("F:\\JavaWork\\jdbc_task03\\src\\com\\zhf\\xml04\\book.xml");

        //通过selectSingleNode（）方法获取name节点
        Node node = document.selectSingleNode("/bookstore/book/name");
        System.out.println("节点名称："+node.getName());
        System.out.println("书名: "+node.getText());

        //获取第二本书的书名
        Node node1 = document.selectSingleNode("/bookstore/book[2]/name");
        System.out.println("节点名称："+node1.getName());
        System.out.println("书名: "+node1.getText());
    }

    /**
     * 使用selectSingleNode()方法获取属性值或者通过属性值获取节点信息
     */
    @Test
    public  void test2() throws DocumentException {
        //创建XML解析对象
        SAXReader reader = new SAXReader();

        //解析XML 获取文档对象
        Document document=reader.read("F:\\JavaWork\\jdbc_task03\\src\\com\\zhf\\xml04\\book.xml");

        //获取第一个book节点中的id属性的值
        Node id = document.selectSingleNode("/bookstore/book/attribute::id");
        System.out.println("第一个book的id属性值"+id.getText());

        //获取最后一个book节点的id属性值
        Node node = document.selectSingleNode("bookstore/book[last()]/attribute::id");
        System.out.println("最后一个book节点中id属性值"+node.getText());

        //通过id的值获取book2节点中的书名
        Node node1 = document.selectSingleNode("bookstore/book[@id='book2']");
        String name = node1.selectSingleNode("name").getText();
        System.out.println("id为book2的节点的书名是："+name);
    }

    /**
     * 使用selectNodes()获取所有指定名称的节点
     */
    @Test
    public void test3() throws DocumentException {
        //创建XML解析对象
        SAXReader reader = new SAXReader();

        //解析XML 获取文档对象
        Document document=reader.read("F:\\JavaWork\\jdbc_task03\\src\\com\\zhf\\xml04\\book.xml");

        //查询所有节点
        List<Node> list = document.selectNodes("//*");
        for (Node node:list){
            System.out.println("节点名:"+node.getName());
        }

        //获取所有的书名
        List<Node> list1 = document.selectNodes("//name");
        for (Node node1:list1){
            System.out.println("书名:"+node1.getText());
        }

        //获取id为book1节点中所有内容
        List<Node> list2 = document.selectNodes("/bookstore/book[@id='book1']//*");
        for (Node node2:list2){
            System.out.println(node2.getName()+" = "+node2.getText());
        }

    }
}
